#!/bin/bash

###############################################
# 流量监控脚本
# 名称：monitor_traffic.sh
# 版本：1.4
# 作者：YourName
# 日期：2025-03-22
# 描述：
#   本脚本用于实时监控网络接口流量，支持多种监控工具。
#   工具支持：iftop、nload、vnstat。
#   自动检测工具安装状态，缺失时自动安装。
#   交互式选择监控工具和接口。
###############################################

# 显示标题信息
show_title() {
    echo "=============================="
    echo " 网络流量监控脚本 "
    echo "=============================="
}

# 检查工具是否安装并自动安装
check_tool() {
    if ! command -v "$1" &> /dev/null; then
        echo "$1 未安装，正在自动安装..."
        sudo apt update && sudo apt install -y "$1"
        if ! command -v "$1" &> /dev/null; then
            echo "$1 安装失败，请手动安装。"
            exit 1
        fi
        echo "$1 安装成功！"
    fi
}

# 获取所有网络接口
get_all_interfaces() {
    ip -o link show | awk -F': ' '{print $2}' | grep -v '^lo'
}

# 列出网络接口并让用户选择
select_interface() {
    echo -e "\n可用网络接口："
    interfaces=($(get_all_interfaces))
    if [[ ${#interfaces[@]} -eq 0 ]]; then
        echo "未检测到有效网络接口。"
        exit 1
    fi
    for i in "${!interfaces[@]}"; do
        echo "$((i+1)). ${interfaces[$i]}"
    done
    read -p "请选择要监控的网卡编号: " choice
    if [[ $choice -gt 0 && $choice -le ${#interfaces[@]} ]]; then
        selected_iface="${interfaces[$((choice-1))]}"
    else
        echo "选择无效，请重新运行脚本。"
        exit 1
    fi
}

# 选择监控工具
select_tool() {
    echo -e "\n可用监控工具："
    tools=("iftop" "nload" "vnstat")
    for i in "${!tools[@]}"; do
        echo "$((i+1)). ${tools[$i]}"
    done
    read -p "请选择要使用的监控工具编号: " choice
    if [[ $choice -gt 0 && $choice -le ${#tools[@]} ]]; then
        selected_tool="${tools[$((choice-1))]}"
    else
        echo "选择无效，请重新运行脚本。"
        exit 1
    fi
}

# 主程序
show_title
select_interface
iface="$selected_iface"
select_tool
tool="$selected_tool"
check_tool "$tool"

echo -e "\n正在使用 $tool 监控接口 $iface..."
if [[ "$tool" == "iftop" ]]; then
    sudo iftop -i "$iface"
elif [[ "$tool" == "nload" ]]; then
    sudo nload "$iface"
elif [[ "$tool" == "vnstat" ]]; then
    sudo vnstat -i "$iface" -l
fi
